/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function (nums, target) {
  // 创建一个哈希表存储数字和对应的索引
  const map = new Map();

  // 遍历数组
  for (let i = 0; i < nums.length; i++) {
    // 计算目标差值
    const complement = target - nums[i];

    // 检查差值是否已在哈希表中
    if (map.has(complement)) {
      // 如果存在，返回两个索引
      return [map.get(complement), i];
    }

    // 如果不存在，将当前数字和索引存入哈希表
    map.set(nums[i], i);
  }

  // 根据题目要求，一定有一个有效答案，所以这里不会执行
  return [];
};

// 测试示例
console.log(twoSum([2, 7, 11, 15], 9)); // 输出: [0, 1]
console.log(twoSum([3, 2, 4], 6)); // 输出: [1, 2]
console.log(twoSum([3, 3], 6)); // 输出: [0, 1]
